cloud-initを使ってEC2のLaunchが完了したらYoする
前置き
この記事は以下スライドに対するアンサーです。
そして、タイトルで既に出オチなのは覚悟の上です。
はじめに
Amazon Linuxのcloud-initの動きについて調べてみたで、cloud-initの最後に実行されるのはcloud_final_modulesであると書きました。そしてcloud_final_modulesには以下のモジュールが含まれています。
# The modules that run in the 'final' stage cloud_final_modules: - scripts-per-once - scripts-per-boot - scripts-per-instance - scripts-user - ssh-authkey-fingerprints - keys-to-console - phone-home - final-message - power-state-change
このscripts-per-*モジュールのソースを見ると、以下のような動きになっています。
- scripts-per-once ... /var/lib/cloud/scripts/per-once配下のスクリプトファイルが一度だけ実行。
- scripts-per-boot ... /var/lib/cloud/scripts/per-boot配下のスクリプトファイルが起動するたびに実行。
- scripts-per-instance ... /var/lib/cloud/scripts/per-instance配下のスクリプトファイルが、特定のインスタンスIDに対して一度だけ実行。
それでは、scripts-per-onceを使えば、EC2がLaunchされた時に通知することが出来るだろう、じゃあYo使えば良くね?というのが今回のスタート地点です。なんか無理がある気はしてるんですが気にしないで下さい。
やってみる
Amazon Linux AMIでEC2をLaunchするときに、以下のようにUser-Dataを設定します。
#cloud-config write_files: - content: | #!/bin/sh curl --data "api_token=YOUR_API_TOKEN" http://api.justyo.co/yoall/ owner: root:root path: /var/lib/cloud/scripts/per-once/yo.sh permissions: '0755'
EC2のLaunchが完了すると、api_tokenで指定したYOアカウントがyoallをしてくれるので、そのYoアカウントをFollowしているアカウント全員にYoが飛んできます。
cloud-init.logを確認すると、こんな感じでログが残っています。
Aug 22 06:56:20 cloud-init[1451]: util.py[DEBUG]: Writing to /var/lib/cloud/scripts/per-once/yo.sh - wb: [493] 99 bytes Aug 22 06:56:20 cloud-init[1451]: util.py[DEBUG]: Changing the ownership of /var/lib/cloud/scripts/per-once/yo.sh to 0:0 Aug 22 06:56:49 cloud-init[1647]: util.py[DEBUG]: Running command ['/var/lib/cloud/scripts/per-once/yo.sh'] with allowed return codes [0] (shell=True, capture=False)
はい、出来ました!
さいごに
以上をせーのに捧げます。